package fr.bugtracker.bean.session;

import java.io.Serializable;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import fr.bugtracker.bean.AbstractBean;
import fr.bugtracker.commun.outils.UtilsAuthentication;
import fr.bugtracker.entity.technique.Utilisateur;
import fr.bugtracker.service.outils.SrvMetier;

/**
 * Bean pour la session
 * @author lparrot
 */
@ManagedBean
@SessionScoped
public class BeanSession extends AbstractBean implements Serializable {

	/**
	 * service ejb metier
	 */
	@EJB
	private SrvMetier srvMetier;
	/**
	 * si l'utilisateur a switché de compte
	 */
	private boolean switched;

	/**
	 * Constructeur de la classe <code>BeanSession</code>.
	 */
	public BeanSession() {
	}

	/**
	 * Retourne vrai si l'utilisateur est du role passé en parametre.
	 * @param role role.
	 * @return boolean.
	 */
	public boolean isInRole(String role) {
		return FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role);
	}

	/**
	 * Récupère la session http de l'utilisateur connecté
	 * @return {@link HttpSession}
	 */
	public HttpSession getHttpSession() {
		HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		return httpServletRequest.getSession();
	}

	/**
	 * Recupere le username de l'utilisateur loggué
	 * @return {@link String}.
	 */
	public String getLogin() {
		return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
	}

	/**
	 * Récupère l'utilisateur en session
	 * @return {@link Utilisateur}
	 */
	public Utilisateur getUtilisateur() {
		return UtilsAuthentication.getUtilisateurSession();
	}

	/**
	 * <p><b>Accès en lecture à l'attribut switched.</b></p>
	 * @return Retourne l'attribut switched sous forme de <code>boolean</code>.
	 */
	public boolean isSwitched() {
		return this.switched;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut switched.</b></p>
	 * @param switched L'attribut switched à modifier.
	 */
	public void setSwitched(boolean switched) {
		this.switched = switched;
	}

}
